package com.sxt.core.utils;

import java.util.List;

import com.sxt.core.context.IocContext;
import com.sxt.core.model.BeanDefine;
import com.sxt.core.model.BeanLabel;

/**
 * 创建对象
 * @author Liushuangxi
 *
 */
public class FactoryBeanUtil {

	public static void createObject(List<BeanDefine> beanDefines,IocContext iocContext) {
		// 判断参数是否为空
		if(beanDefines==null||beanDefines.isEmpty()||iocContext==null) throw new RuntimeException("参数错误！");
		for (BeanDefine beanDefine : beanDefines) {
			// 得到类名
			String className = beanDefine.getClassName();
			String id = beanDefine.getId();
			try {
				// 创建对象
				Object object = Class.forName(className).newInstance();
				// 得到对象接口,两种情况。有接口或者没有接口
				Class<?>[] interfaces = object.getClass().getInterfaces();
				// 定义接口类型
				Class<?> type =null;
				if(interfaces.length>0) {//有接口
					type = interfaces[0]; // 有接口的
				}else {// 没有接口
					type = object.getClass();
				}
				iocContext.setBean(BeanLabel.of(type, id), object);
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
	}
	
	public static void main(String[] args) {
		List<BeanDefine> list = PackageScanUtil.packagSanAndGetBeanDefine("com.sxt.core.model");
		IocContext iocContext = new IocContext();
		createObject(list,iocContext);
	}
}
